{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "cac92b88",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import json\n",
    "import ast\n",
    "from tqdm import tqdm\n",
    "import re\n",
    "import os\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy.stats import sem\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "899b592f",
   "metadata": {},
   "outputs": [],
   "source": [
    "def jaccard_similarity(list1, list2):\n",
    "    if list1 is not None and list2 is not None and len(list1) > 0 and len(list2) > 0:\n",
    "        list1 = [item.lower() for item in list1]\n",
    "        list2 = [item.lower() for item in list2]\n",
    "\n",
    "        set1 = set(list1)\n",
    "        set2 = set(list2)\n",
    "        intersection = len(set1.intersection(set2))\n",
    "        union = len(set1) + len(set2) - intersection\n",
    "        if union == 0:\n",
    "            return 0.0\n",
    "        else:\n",
    "            jaccard_similarity = intersection / union\n",
    "            return jaccard_similarity\n",
    "    else:\n",
    "        return 0.0\n",
    "    \n",
    "def extract_answer(text):\n",
    "    pattern = r'{[^{}]*}'\n",
    "    match = re.search(pattern, text)\n",
    "    if match:\n",
    "        return match.group()\n",
    "    else:\n",
    "        return None\n",
    "    \n",
    "def extract_by_splitting(text):\n",
    "    compound_list = text.split(':')[1].split(\"Diseases\")[0].split(\"], \")[0]+\"]\"\n",
    "    disease_list = text.split(':')[-1].split(\"}\")[0]\n",
    "    resp = {}\n",
    "    resp[\"Compounds\"] = ast.literal_eval(compound_list)\n",
    "    resp[\"Diseases\"] = ast.literal_eval(disease_list)\n",
    "    return resp\n",
    "\n",
    "def get_hyperparam_perf(files):\n",
    "    llm_performance_list = []\n",
    "    for file in tqdm(files):\n",
    "        df = pd.read_csv(os.path.join(PARENT_PATH, file))\n",
    "        df.dropna(subset=[\"llm_answer\"], inplace=True)\n",
    "        llm_performance_list_across_questions = []\n",
    "        for index, row in df.iterrows():\n",
    "            ground_truth = ast.literal_eval(row[\"central_nodes_groundTruth\"])\n",
    "            try:\n",
    "                llm_answer = json.loads(row[\"llm_answer\"])\n",
    "            except:\n",
    "                try:\n",
    "                    llm_answer = ast.literal_eval(row[\"llm_answer\"].split(\"Nodes:\")[-1])\n",
    "                except:\n",
    "                    llm_answer = []\n",
    "            if not isinstance(llm_answer, list):\n",
    "                llm_result = llm_answer[\"Nodes\"]\n",
    "            else:\n",
    "                llm_result = llm_answer\n",
    "            llm_performance_list_across_questions.append(jaccard_similarity(ground_truth, llm_result))\n",
    "        llm_performance_list.append((np.mean(llm_performance_list_across_questions), np.std(llm_performance_list_across_questions), sem(llm_performance_list_across_questions), row[\"context_volume\"]))\n",
    "    hyperparam_perf = pd.DataFrame(llm_performance_list, columns=[\"performance_mean\", \"performance_std\", \"performance_sem\", \"context_volume\"])\n",
    "    return hyperparam_perf\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "075b3375",
   "metadata": {},
   "outputs": [],
   "source": [
    "'''\n",
    "Following files can be obtained by running the run_two_disease_entity_hyperparameter_tuning.py script.\n",
    "Make sure to change the parent path and filenames based on where and how you save the files\n",
    "'''\n",
    "\n",
    "PARENT_PATH = \"../data/results\"\n",
    "\n",
    "\n",
    "FILES_1 = [\n",
    "    \"minilm_based_two_disease_hyperparam_tuning_round_1_gpt_4.csv\",\n",
    "    \"minilm_based_two_disease_hyperparam_tuning_round_2_gpt_4.csv\",\n",
    "    \"minilm_based_two_disease_hyperparam_tuning_round_3_gpt_4.csv\",\n",
    "    \"minilm_based_two_disease_hyperparam_tuning_round_4_gpt_4.csv\",\n",
    "    \"minilm_based_two_disease_hyperparam_tuning_round_5_gpt_4.csv\"\n",
    "]\n",
    "\n",
    "FILES_2 = [\n",
    "    \"pubmert_based_two_disease_hyperparam_tuning_round_1_gpt_4.csv\",\n",
    "    \"pubmert_based_two_disease_hyperparam_tuning_round_2_gpt_4.csv\",\n",
    "    \"pubmert_based_two_disease_hyperparam_tuning_round_3_gpt_4.csv\",\n",
    "    \"pubmert_based_two_disease_hyperparam_tuning_round_4_gpt_4.csv\",\n",
    "    \"pubmert_based_two_disease_hyperparam_tuning_round_5_gpt_4.csv\"\n",
    "]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "00854dfb",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|█████████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:00<00:00, 52.99it/s]\n",
      "100%|█████████████████████████████████████████████████████████████████████████████████████████| 5/5 [00:00<00:00, 66.61it/s]\n"
     ]
    }
   ],
   "source": [
    "mini_lm_perf = get_hyperparam_perf(FILES_1)\n",
    "pubmedBert_perf = get_hyperparam_perf(FILES_2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "a0c605d1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 300x400 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "params = mini_lm_perf.context_volume.values\n",
    "mini_lm_mean_performance = mini_lm_perf.performance_mean.values\n",
    "mini_lm_std_deviation = mini_lm_perf.performance_std.values\n",
    "mini_lm_sem_value = mini_lm_perf.performance_sem.values\n",
    "\n",
    "pubmedBert_mean_performance = pubmedBert_perf.performance_mean.values\n",
    "pubmedBert_std_deviation = pubmedBert_perf.performance_std.values\n",
    "pubmedBert_sem_value = pubmedBert_perf.performance_sem.values\n",
    "\n",
    "fig = plt.figure(figsize=(3, 4))\n",
    "plt.errorbar(params, mini_lm_mean_performance, yerr=None, fmt='o-', capsize=5, label='all-MiniLM-L6-v2')\n",
    "plt.errorbar(params, pubmedBert_mean_performance, yerr=None, fmt='o-', capsize=5, label='PubMedBERT', color=\"darkred\")\n",
    "plt.xlabel('Context volume')\n",
    "plt.ylabel('Mean Performance')\n",
    "plt.grid(True)\n",
    "plt.legend(bbox_to_anchor=(0.2, 0.35))\n",
    "plt.show()\n",
    "\n",
    "fig_filename = \"../data/results/figures/context_volume_two_disease_prompt_miniLM_vs_PubMedBert.svg\"\n",
    "fig.savefig(fig_filename, format='svg', bbox_inches='tight')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "e7eb274c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.37"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "round(mini_lm_perf.performance_mean.mean(), 2)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "f6fb10e2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.4"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "round(pubmedBert_perf.performance_mean.mean(), 2)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "d96cb0c5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "8.108108108108116"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "100*(round(pubmedBert_perf.performance_mean.mean(), 2) - round(mini_lm_perf.performance_mean.mean(), 2))/round(mini_lm_perf.performance_mean.mean(), 2)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "fd4f3cdc",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
